package com.uacp.sgb.datos.dominio.entidades;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.IndexColumn;

@Entity
@NamedQueries
({
	@NamedQuery(name = "Adquisicion.buscarPorPecosa",
			query = "SELECT a FROM Adquisicion a where a.pecosa.codigo = :codPecosa")
})
public class Adquisicion implements Serializable
{
	@Id
	@GeneratedValue
	private Long id;
	private String estado;
	
	@OneToOne(cascade=CascadeType.PERSIST)
	private Pecosa pecosa;
	@OneToOne(cascade=CascadeType.PERSIST)
	private OrdenCompra ordenCompra;
	@OneToOne
	private Proveedor proveedor;
	@OneToOne
	private Dependencia area;
	@OneToOne
	private Trabajador trabajador;
	@OneToOne(cascade=CascadeType.PERSIST)
	private TipoAdquisicion tipoAdquisicion;
	
	@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.MERGE)
	@JoinColumn(name="equipos_adquisicion")
	@IndexColumn(name="IDX1")
	private List<Equipo> equipos;
	
	@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.MERGE)
	@JoinColumn(name="muebles_adquisicion")
	@IndexColumn(name="IDX2")
	private List<Mueble> muebles;
	
	@OneToOne(cascade=CascadeType.PERSIST)
	private GuiaDeRemision guiaDeRemision;
	 
	public TipoAdquisicion getTipoAdquisicion() {
		return tipoAdquisicion;
	}

	public void setTipoAdquisicion(TipoAdquisicion tipoAdquisicion) {
		this.tipoAdquisicion = tipoAdquisicion;
	}

	public Trabajador getTrabajador() {
		return trabajador;
	}

	public void setTrabajador(Trabajador trabajador) {
		this.trabajador = trabajador;
	}
	
	public OrdenCompra getOrdenCompra() {
		return ordenCompra;
	}

	public void setOrdenCompra(OrdenCompra ordenCompra) {
		this.ordenCompra = ordenCompra;
	}

	public Proveedor getProveedor() {
		return proveedor;
	}

	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

	public Pecosa getPecosa() {
		return pecosa;
	}

	public Adquisicion()
	{
		estado = "E";
	}
	
	public String getEstado() 
	{
		return estado;
	}

	public void setEstado(String estado) 
	{
		this.estado = estado;
	}

	public void setPecosa(Pecosa pecosa) 
	{
		this.pecosa = pecosa;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public List<Equipo> getEquipos() {
		return equipos;
	}

	public void setEquipos(List<Equipo> equipos) {
		this.equipos = equipos;
	}

	public List<Mueble> getMuebles() {
		return muebles;
	}

	public void setMuebles(List<Mueble> muebles) {
		this.muebles = muebles;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		
		Adquisicion other = (Adquisicion) obj;
		
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	public Dependencia getArea() {
		return area;
	}

	public void setArea(Dependencia area) {
		this.area = area;
	}

	public void setGuiaDeRemision(GuiaDeRemision guiaderemision) 
	{
		this.guiaDeRemision = guiaderemision;		
	}
	
	public GuiaDeRemision getGuiaDeRemision()
	{
		return guiaDeRemision;
	}
}

